<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="../res/layui/css/layui.css">

</head>
<body>
<div class="layui-fluid">
    <fieldset class="layui-elem-field layui-field-title">
        <legend>音乐上传</legend>
        <div class="layui-field-box">
            <div class="layui-col-md6">
                <form class="layui-form layui-form-pane" lay-filter="formMusic" id="formMusic">
                    <!--表单控件项：文件上传（歌曲文件）-->
                    <div class="layui-form-item">
                        <label class="layui-form-label">歌曲文件:</label>
                        <button class="layui-btn layui-btn-normal" type="button" id="btnMusic">
                            <i class="layui-icon layui-icon-upload"></i>
                            选择文件
                        </button>
                        <!--播放器隐藏控件：获取总播放时长用-->
                        <audio src="" id="player" style="display: none"></audio>
                        <!--表单提交时提交歌曲总播放时长-->
                        <input type="hidden" name="duration" id="duration"/>
                    </div>
                    <!-- 资源类型选择控件-->
                    <!-- <div class="layui-form-item" pane>
                        <label class="layui-form-label">资源类型:</label>
                        <div class="layui-input-block">
                            <input type="radio" name="musictype" value="0" title="歌曲" checked>
                            <input type="radio" name="musictype" value="1" title="mv">
                        </div>
                    </div> -->

                    <!--歌曲的专辑选择控件-->
                    <div class="layui-form-item">
                        <label class="layui-form-label">歌曲专辑:</label>
                        <div class="layui-input-block">
                            <select name="aid" id="aid">
                                <!-- <option value="0">匿名</option> -->
                            </select>
                        </div>
                    </div>
                    <!--表单控件项：歌曲名-->
                    <div class="layui-form-item">
                        <label class="layui-form-label">歌曲名:</label>
                        <div class="layui-input-block">
                            <input class="layui-input" type="text" name="name" id="musicname" lay-verify="required"
                                   lay-verType="tips" lay-reqText="请输入歌曲名称">
                        </div>
                    </div>
                    <!--表单控件项：歌曲风格流派-->
                    <div class="layui-form-item">
                        <label class="layui-form-label">风格:</label>
                        <div class="layui-input-block">
                            <select name="style" id="style">
                                <option value="流行">流行</option>
                                <option value="Rap/Hip Hop">Rap/Hip Hop</option>
                                <option value="pop">pop</option>
                                <option value="摇滚">摇滚</option>
                                <option value="民谣">民谣</option>
                                <option value="电子">电子</option>
                                <option value="轻音乐">轻音乐</option>
                                <option value="爵士">爵士</option>
                                <option value="R&B">R&B</option>
                                <option value="乡村">乡村</option>
                                <option value="中国风">中国风</option>
                                <option value="说唱">说唱</option>
                                <option value="古典">古典</option>
                                <option value="世界音乐">世界音乐</option>
                            </select>
                        </div>
                    </div>
                    <!-- 歌词控件    -->
                    <div class="layui-form-item layui-form-text">
                        <label class="layui-form-label">歌词:</label>
                        <div class="layui-input-block">
                            <textarea name="lrc" class="layui-textarea" placeholder="请填写歌词内容"></textarea>
                        </div>
                    </div>
                    <!-- 提交按钮    -->
                    <div class="layui-form-item" style="text-align: right">
                        <button type="button" class="layui-btn layui-btn-warm" lay-submit id="addMusic">确认添加
                        </button>
                    </div>
                </form>
            </div>
        </div>
    </fieldset>
</div>
<script src="../res/layui/layui.js"></script>
<script>
    layui.use(function () {
        var form = layui.form;
        var layer = layui.layer;
        var $ = layui.jquery;
        //获取文件上传组件
        var upload = layui.upload;

        //请求专辑列表接口，查询所有专辑信息 并绑定到指定控件中显示
        $.get('http://127.0.0.1/ablum/listAll',function(resp){
            //获取响应回来的数据集（专辑列表）
            let list = resp.data
            //遍历专辑列表并渲染
            $.each(list,(i,a)=>{
                $('#aid').append(`<option value="${a.id}">${a.name}</option>`)
            })
            //重新渲染列表控件
            form.render('select')
        })

        //绑定上传组件
        upload.render({
            elem:'#btnMusic',     //绑定选择文件的按钮控件
            auto:false,          //阻止自动上传
            accept:'audio',     //限定上传文件类型为 音频（默认为image）
            acceptMime:'audio/*', //打开文件选择框时，只筛选音频文件
            field:'myfile',        //文件域字段名，后端接口接收数据时使用该名称作为key
            choose:function(obj){   //当文件选择完毕之后的回调（未上传）
                obj.preview(function(index,file,result){ //文件预览函数 1:文件索引  2:文件对象  3:文件base64编码
                    //获取文件名
                    let fname = file.name
                    //截掉文件后缀名
                    let i = fname.lastIndexOf('.')
                    fname = fname.substring(0,i)
                    //将歌曲名称填充到指定位置
                    $('#musicname').val(fname)
                    //为播放器设置播放源
                    $('#player').prop('src',result)
                })
            }
        })

        //上传表单提交
        $('#addMusic').on('click',function(){
            //获取播放器总时长（秒）
            let total = $('#player').prop('duration')    
            //转换秒为毫秒
            total = parseInt(total * 1000)
            //将毫秒填充隐藏域中
            $('#duration').val(total)

            //获取表单数据
            let f = $('#formMusic')
            //将表单对象转换为formData对象
            let formData = new FormData(f[0])
            //显示加载进度
            let loadIndex = layer.msg('上传中...',{icon:16,shade:0.01})
            //发送请求
            $.ajax({
                url:'http://127.0.0.1/music/upload',
                type:'POST',
                contentType:false,      //内容类型使用原始类型
                processData:false,      //对数据不做任何处理提交
                data:formData,      //传递数据
                success:function(resp){
                    //关闭加载框
                    layer.close(loadIndex)
                    if(resp.code === 0){
                        layer.msg(resp.msg)
                    }else{
                        layer.alert(resp.msg,{icon:2})
                    }
                }
            })
        })

    })
</script>
</body>
</html>